package ISBN;

/**
 * @Author Stringzhua
 * @Date 2024/4/21 11:11
 * description:
 * 每一本正式出版的图书都有一个ISBN号码与之对应，
 * ISBN 码包括9位数字、1 位识别码和3 位分隔符，
 * 其规定格式如“x-Xx0x-xxx0X-X"，其中符号“-“是分隔符(键盘上的减号)，最后位是识别码，
 * 例如0-670-82162-4 就是一个标准的ISBN码。
 * ISBN 码的首位数字表示书籍的出版语言，例如0代表英语;第一个分隔符"“"之后的三位数字代表出版社，例如670 代表维京出版社;
 * 第二个分隔之后的五位数字代表该书在出版社的号;
 * 最后一位为识别码。
 * 识别码的计算方法如下:
 * 首位数字乘以1加上次位数字乘以2.以此类推，用所得的结果 mod 11，所得的余数即为识别码，
 * 如果余数为 10，则识别码为大写字母X。
 * 例如ISBN 号码 0-670-82162-4 中的识别码4是这样得到的:
 * 对 067082162这9个数字，从左至右，分别乘以1，2，…，9，再求和，
 * 即 0x1+6x2+.+2x9=158，然后取 158 mod 11 的结果4作为识别码。
 * 你的任务是编写程序判断输入的ISBN号码中识别码是否正确，如果正确，则仅输出Right;如果错误，则输出你认为是正确的ISBN 号码。
 * 输入描述
 * 输入一行，是一个字符序列，表示一本书的ISBN号码(保证输入符合ISBN号码的格式要求)
 * 输出描述
 * 输出一行，假如输入的ISBN 号码的识别码正确，那么输出Right，否则，按照规走的格式输出正确的 ISBN 号码(包括分隔符"”)。
 */
public class test01 {
    public static void main(String[] args) {
        String ISBN = "0-670-82162-4";
//        String ISBN = "0-670-82162-0";
        int[] ArrISBN = new int[ISBN.length() - 3];
        System.out.println(ISBN);
        //1.去除-
        int sum = 0;
        int idCard = 0;
        int index = 0;//添加一个索引变量记录当前数组的位置
        for (int i = 0; i < ISBN.length(); i++) {
            char c = ISBN.charAt(i);
            if (c == '-') {
                continue;//如果为-，结束本次循环
            }
            //2.将去除后的c加入到数组中
            ArrISBN[index++] = c - '0';//将字符c转换成数字并存储到数组
            System.out.print(c);
        }
        System.out.println();
        //遍历一下数组
        for (int s : ArrISBN) {
            System.out.print(s);
        }
        //ok
        System.out.println();
        //3.首位数字乘以1加上次位数字乘以2.以此类推到第九位，用所得的结果 mod 11，所得的余数即为识别码，
        for (int k = 0; k < ArrISBN.length - 1; k++) {
            sum = sum + ArrISBN[k] * (k + 1);//计算上次位数字+本次数字*第几位
            System.out.printf("%d+%d*%d=%d\n", sum, ArrISBN[k], k + 1, sum);
        }
        //4.计算识别码
        System.out.println(sum);//158
        idCard = sum % 11;
        System.out.println(idCard);//4
        //5.判断
        int lastISBN = Integer.parseInt(ISBN.substring(ISBN.length() - 1));
        System.out.println(lastISBN);//4
        if (lastISBN == idCard) {
            System.out.println("Right");
        } else {
            if (idCard == 10) {
                idCard = 'X';
            }
            lastISBN = idCard;
            ISBN = ISBN.substring(0, ISBN.length() - 1) + lastISBN;
            System.out.println(ISBN);
        }
    }
}
